//导入 axios 
import axios from 'axios'
//导入 axios 副本
const instance = axios.create({
  baseURL: '/api'
})
//导入 massage 
import {
  Message
} from 'element-ui'
import {
  getToken,
  getTimeStamp
} from '@/utils/auth'
//导入 store
import store from '@/store'
//导入 router
import router from '@/router'
//定义一个过期的时间
const time = 30 * 60 * 1000
// const time = 5000
//设置拦截器
//设置请求拦截
instance.interceptors.request.use(
  config => {
    //得到 token
    // console.log(config);
    const token = getToken()
    // console.log(token);
    if (token) {
      //得到当前时间
      const cureentTime = Date.now()
      //再得到保存 token 的时间
      const tokenTime = getTimeStamp()
      //得到两者的时间差
      const space = cureentTime - tokenTime
      //判断token 是否过期
      if (space >= time) {
        //说明超时
        //清除token
        store.dispatch('user/logout')
        //提示
        Message.info('token超时,请重新登录')
        //跳转到登录页面
        router.push(`login?_redirect=${window.location.href.split('#')[1]}`)
        return Promise.reject(new Error('token 超时'))
      }
      //将 token s设置到请求头中
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  }, error => {
    return Promise.reject(error)
  }
)


//设置响应拦截
instance.interceptors.response.use(
  response => {
    const {
      data: {
        success,
        message
      }
    } = response
    //判断当前请求的结果是否为 true
    if (success) {
      ////返回数据时 直接返回服务器响应的内容
      return response.data

    } else {
      //提示错误信息
      Message.error(message)
      return Promise.reject(new Error(message))
    }
  },
  error => {
    console.dir(error)
    //判断返回的状态
    if (
      error.response &&
      error.response.data &&
      error.response.data.code === 10002
    ) {
      // 说明 token 超时
      // 删除 token
      store.dispatch('user/logout')
      //提示
      Message.info('登录超时, 请重新登录')
      //退出登录
      router.push(`/login?_redirect=${window.location.href.split('#')[1]}`)
    }
    return Promise.reject(error)
  }
)
//暴露出口
export default instance
